<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  // 作为普通函数   => 强制类型转换
  // Number()   String()   Boolean()
  // var str = String(1000);
  // console.log(str);

  // 作为构造函数   => 创建实例化对象
  // var str = new String(1000);
  // console.log(str);

  // var arr = new Array();
  // console.log(arr);


  // 作为普通函数
  // function fn() {
  //     console.log(this);
  // }
  // var result = fn();   // this -> window  返回值:undefined
  // console.log(result);

  // new关键词 做了什么操作?
  // 1. 创建纯净的空对象   {}
  // 2. 将this指向该对象   this -> {}
  // 3. return this;


  // 注意:
  // 1. 构造函数中的this, 指向函数在执行过程中创建的实例化对象   
  // 2. 为了区分普通函数和构造函数  要求构造函数首字母大写

  function fn() {
    // {}    >fn {}
    // this -> {}    this instanceof fn = > true 构造函数创建

    console.log(this, this instanceof fn);  //可以通过this关键词 操作创建的对象

    // return this;
  }
  // 作为构造函数 => 调用 

  // 调用构造函数fn, 指向构造函数的上下文  => 返回创建的实例化对象  => 赋值给变量result
  var result = new fn();   // this -> window  返回值:undefined
  console.log("返回值", result);






</script>

</html>